共计 1624 个字符,预计需要花费 5 分钟才能阅读完成。
import java.util.Scanner;
/**
* 标题:字符串分割 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限
* 给定一个非空字符串S,其被N个‘-’分隔成N+1的子串,给定正整数K,要求除第一个子串外,其余的子串每K个字符组成新的子串,并用‘-’分隔。
* 对于新组成的每一个子串,如果它含有的小写字母比大写字母多,则将这个子串的所有大写字母转换为小写字母;
* 反之,如果它含有的大写字母比小写字母多,则将这个子串的所有小写字母转换为大写字母;大小写字母的数量相等时,不做转换。
* <p>
* 输入为两行,第一行为参数K,第二行为字符串S。
* 输出描述:
* 输出转换后的字符串。
* <p>
* 示例1
* 输入
* 3
* 12abc-abCABc-4aB@
* 输出
* 12abc-abc-ABC-4aB-@
* 说明
* 子串为12abc、abCABc、4aB@,第一个子串保留,后面的子串每3个字符一组为abC、ABc、4aB、@,
* abC中小写字母较多,转换为abc,ABc中大写字母较多,转换为ABC,4aB中大小写字母都为1个,不做转换,@中没有字母,连起来即12abc-abc-ABC-4aB-@
* <p>
* 示例2
* 输入
* 12
* 12abc-abCABc-4aB@
* 输出
* 12abc-abCABc4aB@
* 说明
* 子串为12abc、abCABc、4aB@,第一个子串保留,后面的子串每12个字符一组为abCABc4aB@,这个子串中大小写字母都为4个,不做转换,连起来即12abc-abCABc4aB@
*
* @since 2022年4月30日
*/
public class M_N_T_17 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String K = scanner.nextLine();
String S = scanner.nextLine();
String[] strings = S.split("-");
StringBuilder stringBuilder = new StringBuilder();
for (int i = 1; i < strings.length; i++) {
stringBuilder.append(strings[i]);
}
char[] chars = stringBuilder.toString().toCharArray();
int k = Integer.parseInt(K);
int num = chars.length / k;
int mo = chars.length % k;
StringBuilder finalStr = new StringBuilder();
int len = 0;
for (int i = 0; i <= num; i++) {
len += (i + 1) * k <= num * k ? k : mo;
StringBuilder tempStr = new StringBuilder();
int countUp = 0;
int countDo = 0;
for (int j = i * k; j < len; j++) {
if (65 <= chars[j] && chars[j] <= 90) {
countUp++;
}
if (97 <= chars[j] && chars[j] <= 122) {
countDo++;
}
tempStr.append(chars[j]);
}
if (countUp > countDo) {
finalStr.append("-").append(tempStr.toString().toUpperCase());
} else if (countUp == countDo) {
finalStr.append("-").append(tempStr);
} else {
finalStr.append("-").append(tempStr.toString().toLowerCase());
}
}
System.out.println(strings[0] + finalStr);
}
}
正文完